package cfca.paperless.client.servlet._3_assist._3_11_AutoGenerateImage;

import cfca.paperless.client.servlet.PaperlessClient;
import cfca.paperless.client.servlet.PaperlessConfig;
import cfca.paperless.client.util.GUID;
import cfca.paperless.client.util.IoUtil;
import cfca.paperless.client.util.PaperlessUtil;
import cfca.paperless.client.util.StringUtil;

/**
 * @Description 自助生成图片接口，使用示例。
 * 1：指定印模类型【1：方型；11：方形（带框）；】。
 * 2，可以指定印模中的各种元素。
 * 3，可以添加业务码及指定其样式。
 * 
 * @Author dell
 * @Date 2016-5-16
 * @CodeReviewer TODO
 */
public class AutoGenerateImageTest02 {

    public static void main(String[] args) throws Exception {

        long timeStart = System.currentTimeMillis();// 开始时间

        System.out.println("AutoGenerateImageTest02 START");

        PaperlessClient clientBean = new PaperlessClient(PaperlessConfig.assistUrl, 10000, 60000);// 无纸化辅助接口的访问URL
        
        // 1：方型
        // 11：方形（带框）
        // 2：长方形（不带“章”字）
        // 21：长方形（带框）
        // 3：圆形（不带五角星）
        // 4：圆形（带五角星）
        int shape = 3;
        //int shape = 11;
        
        int width = 100;// 图片宽（单位：像素）
        int height = 100;// 图片高（单位：像素）
        
        String color = "FF0000";// 十六进制，默认FF0000（适用于方章和长方形章）
        int fontSize = 100;// 字体大小（单位：像素），默认100（适用于方章和长方形章）
        
        String name = "我的印章哦";// 印模文字。长方形时，换行字符为“##”
        
        String name2 = "我的圆形章";// 圆形章时用到，印模文字，如：电子回单专用章
        // 圆形章时用到，印模文字样式。说明：该字段为空时，使用默认样式:"font-family:Times,font-size:8;x-ratio:0.2;y-ratio:0.8"
        String name2Style = "";

        String businessCode = "123456";// 圆形章时用到，业务码：可以是验证码、查询码等
        String businessCodeStyle = "";// 圆形章时用到，业务码样式。说明：该字段为空时，使用管理页面上设置的“业务码样式”。
        
        String imageStrategyXml = createImageStrategyXml(name, name2, name2Style, width, height, shape, color, fontSize, businessCode, businessCodeStyle);
        
        System.out.println(imageStrategyXml);

        // 操作员编码或者机构号
        String operatorCode = PaperlessConfig.operatorCode;
        // 渠道编码，可以为空
        String channelCode = PaperlessConfig.channelCode;

        String systemNo = GUID.generateId();//业务流水号可为空， 

        // 取得生成的图片文件数据
        byte[] result = clientBean.autoGenerateImage(systemNo, imageStrategyXml, operatorCode, channelCode);

        String errorRsString = PaperlessUtil.isError(result);

        // 处理结果为正常，保存生成的图片文件到本地目录下
        if ("".equals(errorRsString)) {
            System.out.println("AutoGenerateImageTest02 END OK");

            System.out.println(result.length);
            IoUtil.write("./TestData/output/AutoGenerateImageTest02.png", result);

        } else {
            // 处理结果为异常，打印出错误码和错误信息
            System.out.println("AutoGenerateImageTest02 END NG");
            System.out.println(new String(result, "UTF-8"));
        }

        long timeEnd = System.currentTimeMillis();// 结束时间
        System.out.println("##########" + "time used:" + (timeEnd - timeStart) + "##########");
    }

    /**
     * 生成图片生成策略文件
     * 
     * @return
     */
    public static String createImageStrategyXml(String name, String name2, String name2Style, int width, int height, int shape, String color, int fontSize,
            String businessCode, String businessCodeStyle) {

        StringBuilder imageStrategyXML = new StringBuilder();

        imageStrategyXML.append("<Request>");
        // 1：方型
        // 11：方形（带框）
        // 2：长方形（不带“章”字）
        // 21：长方形（带框）
        // 3：圆形（不带五角星）
        // 4：圆形（带五角星）
        imageStrategyXML.append("<ImageShape>").append(shape).append("</ImageShape>");
        imageStrategyXML.append("<ImageWidth>").append(width).append("</ImageWidth>");// 图片宽
        imageStrategyXML.append("<ImageHeight>").append(height).append("</ImageHeight>");// 图片高
        imageStrategyXML.append("<Color>").append(color).append("</Color>"); // 十六进制，默认FF0000
        imageStrategyXML.append("<FontSize>").append(fontSize).append("</FontSize>"); // 字体大小，默认100
        imageStrategyXML.append("<ImageName>").append(name).append("</ImageName>");// 长方形换行字符“##”
        imageStrategyXML.append("<ImageName2>").append(name2).append("</ImageName2>");//

        if (StringUtil.isNotEmpty(name2Style)) {
            imageStrategyXML.append("<ImageName2Style>").append(name2Style).append("</ImageName2Style>");
        }

        if (StringUtil.isNotEmpty(businessCode)) {
            imageStrategyXML.append("<BusinessCode>").append(businessCode).append("</BusinessCode>");
            imageStrategyXML.append("<BusinessCodeStyle>").append(businessCodeStyle).append("</BusinessCodeStyle>");
        }

        imageStrategyXML.append("</Request>");

        return imageStrategyXML.toString();
    }

}
